#include "stdafx.h"
#include "autoryzacjadostepu.h"
#include "ramka.hpp"
#include <iostream>

using namespace System;
using namespace System::Collections;
using namespace System::Configuration;


AutoryzacjaDostepu::AutoryzacjaDostepu()
   : deskrAdmina(0), idAdmina(0) {
	   /*System::Configuration::Configuration ^config = 
    ConfigurationManager::OpenExeConfiguration(
    ConfigurationUserLevel::None);
	config->AppSettings->Settings->Remove("firstName");
config->AppSettings->Settings->Add("firstName", "New firstName");
config->Save(ConfigurationSaveMode::Modified);
ConfigurationManager::RefreshSection("appSettings");*/
	//System::Configuration::Configuration^ konfig = ConfigurationManager::OpenExeConfiguration("hasla.config");
   uzytkownicy = (Hashtable^)ConfigurationManager::GetSection("hasla/users");
   administratorzy= (Hashtable^)ConfigurationManager::GetSection("hasla/admins");

//   Console::WriteLine(uzytkownicy["User"]);
}

AutoryzacjaDostepu::~AutoryzacjaDostepu() {
   
}

void AutoryzacjaDostepu::ustawSerwer(Autoryzowany^ serwer) {
   this->serwer = serwer->pobierzId();
}

void AutoryzacjaDostepu::ustawGUI(Autoryzowany^ gui) {
   this->gui = gui->pobierzId();
   idAdmina = this->gui;
}


int AutoryzacjaDostepu::zaloguj(int deskr, std::string login, std::string haslo) {

   if (uzytkownicy->ContainsKey(Ramka::ToSysString(login))) {
      if(Ramka::ToSysString(login)->Equals(uzytkownicy[Ramka::ToSysString(login)])) {
	 return 1;
      }
   }

   if (administratorzy->ContainsKey(Ramka::ToSysString(login))) {
      if(Ramka::ToSysString(login)->Equals(administratorzy[Ramka::ToSysString(login)])) {
		idAdmina = serwer;
      deskrAdmina = deskr;
	 return 2;
      }
   }   

   return 0;
}


void AutoryzacjaDostepu::wyloguj(int deskr) {
   if(deskr == deskrAdmina) {
      idAdmina = gui;
      deskrAdmina = 0;
   }
}

bool AutoryzacjaDostepu::czyAutoryzowany(Autoryzowany ^obiekt, int deskr) {
   int id = obiekt->pobierzId();
   if((idAdmina == id) &&
      ((id == gui ) || ((id == serwer) && (deskrAdmina == deskr)))) {
      return true;      
   }
   
   return false;
}
